package com.ruoyi.framework.datasource

import org.slf4j.Logger
import org.slf4j.LoggerFactory

/**
 * 数据源切换处理
 *
 * @author ruoyi
 */
object DynamicDataSourceContextHolder {
    val log: Logger = LoggerFactory.getLogger(DynamicDataSourceContextHolder::class.java)

    /**
     * 使用ThreadLocal维护变量，ThreadLocal为每个使用该变量的线程提供独立的变量副本，
     * 所以每一个线程都可以独立地改变自己的副本，而不会影响其它线程所对应的副本。
     */
    private val CONTEXT_HOLDER = ThreadLocal<String>()

    /**
     * 设置数据源的变量
     */
    fun setDataSourceType(dsType: String) {
        log.info("切换到{}数据源", dsType)
        CONTEXT_HOLDER.set(dsType)
    }

    /**
     * 获得数据源的变量
     */
    fun getDataSourceType(): String? {
        // TODO: 2022/9/6/0006 返回可以是null
        return CONTEXT_HOLDER.get()
    }

    /**
     * 清空数据源变量
     */
    fun clearDataSourceType() {
        CONTEXT_HOLDER.remove()
    }
}
